#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
//链接：https://www.acwing.com/problem/content/3268/

//差分约束 + spfa
//由于题目是要求min，所以，应该用最长路的方法来求
//如果要求max，则要用最短路的方法来求

/*
理由如下：
由于是要求不等式组成立的条件，因此，是要求所有子不等式的解的公共部分，
所以，对于求min时，不等式的是大于号，要求满足所有不等式的min，则应该取所有解的交集，即取到另区间最小的解
此时，所求的解，对应到图中，就是求起点到终点的最长路的问题

反之，也是这么分析的

*/
const int N = 310,M = N * 3;

int n;
int h[N],e[M],w[M],ne[M],idx;
int dist[N],q[N];
int b[N];
bool st[N];

void add(int a,int b,int c){
    e[idx] = b,w[idx] = c,ne[idx] = h[a],h[a] = idx++;
}

void spfa(){
    int hh = 0,tt = 1;
    memset(dist, -0x3f,sizeof dist);
    dist[0] = 0;
    while(hh != tt){
        int t = q[hh++];
        if (hh == N){
            hh = 0;
        }
        st[t] = false;
        for (int i = h[t]; ~i; i = ne[i]){
            int j = e[i];
            if (dist[j] < dist[t] + w[i]){
                dist[j] = dist[t] + w[i];
                if (!st[j]){
                    q[tt++] = j;
                    if (tt == N)tt = 0;
                    st[j] = true;
                }
            }
        }
    }
}

int main(){
    cin >> n;
    memset(h,-1,sizeof h);
    for (int i = 1; i <= n; i++)cin >> b[i];
    for (int i = 2; i < n; i++){
        add(i - 2,i + 1,b[i] * 3);
        add(i + 1,i - 2,-(b[i] * 3 + 2));
    }
    add(0,2,b[1] * 2);
    add(2,0,-(b[1] * 2 + 1));
    add(n - 2, n, b[n] * 2);
    add(n, n - 2, -(b[n] * 2 + 1));
    for (int i = 1; i <= n; i++){
        add(i - 1,i,1);
    }
    spfa();
    for (int i = 1; i <= n; i++){
        cout << dist[i] - dist[i - 1] << " ";
    }
    return 0;
}